iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
Security

醫療數據的資安挑戰與創新解決方案系列 第 18

用 Python + hashlib 建立小型「醫療紀錄不可竄改」範例

  • 分享至 

  • xImage
  •  

今日學習目標是理解雜湊(hash)在醫療紀錄安全中的應用,並透過Python撰寫程式,示範如何讓病歷資料在寫入後具備「不可竄改」特性。

一、理論重點

  1. 雜湊函數 (Hash Function):一種單向演算法,可以把輸入資料轉換成固定長度的「數位指紋」。
  2. 不可逆性:無法從雜湊值反推出原始資料。
  3. 敏感性:資料只要被改動一個字元,雜湊值就會完全不同。
  4. 應用在醫療系統:每一份病歷存檔後同時產生雜湊值,用來檢查後續是否有人竄改,若 hash 不一致就代表紀錄被動過手腳。

二、案例分享

2016 年,美國某醫院發生 病歷遭內部人員未經授權竄改 的事件,檢查報告與用藥紀錄被更改,導致病患治療錯誤。若當時有雜湊驗證機制,任何異動都會被及時偵測,避免影響醫療判斷。

三、簡單程式範例

import hashlib

# 建立病歷紀錄(模擬)
medical_records = [
    {"patient": "Alice", "diagnosis": "Diabetes Type 2"},
    {"patient": "Bob", "diagnosis": "Hypertension"},
    {"patient": "Charlie", "diagnosis": "Asthma"}
]

# 計算病歷的 hash
def calculate_hash(record):
    record_str = record["patient"] + record["diagnosis"]
    return hashlib.sha256(record_str.encode()).hexdigest()

# 建立不可竄改的病歷資料庫(紀錄 + hash)
secure_db = []
for record in medical_records:
    secure_db.append({
        "record": record,
        "hash": calculate_hash(record)
    })

# 正常檢查
print("=== 正常驗證 ===")
for item in secure_db:
    rec, h = item["record"], item["hash"]
    print(f"病人 {rec['patient']} - 診斷: {rec['diagnosis']} - Hash 驗證: {h == calculate_hash(rec)}")

# 模擬竄改(更改 Bob 的診斷)
secure_db[1]["record"]["diagnosis"] = "Healthy"

print("\n=== 竄改後驗證 ===")
for item in secure_db:
    rec, h = item["record"], item["hash"]
    print(f"病人 {rec['patient']} - 診斷: {rec['diagnosis']} - Hash 驗證: {h == calculate_hash(rec)}")

只要病歷被修改(即使只是「Hypertension」改成「Healthy」),雜湊值就會不匹配,立即顯示 驗證失敗 (False),達到「不可竄改」的效果。執行結果如下

https://ithelp.ithome.com.tw/upload/images/20250919/20169331zb8alAnBHh.png


上一篇
區塊鏈在醫療紀錄共享的應用介紹
下一篇
病人同意分享紀錄 – 智慧合約基礎
系列文
醫療數據的資安挑戰與創新解決方案24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言